<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>mpt_call_sedumi</title>
<style type="text/css">
	body {background-color: white; color: black; font-family:sans-serif; font-size:medium;}
	a:link {color: #3300ff;}
	a:visited {color: #663399;}
	a:hover {color:#0099ff;}
	a:active {color: #0066cc;}
	a.button {text-decoration:none;}
	
	table.nav  {background-color: #dbddff;}
	table.body {margin-top:2ex; margin-bottom:2ex;}
	table.programlistingindent {margin-left:32px;}
	
	img { margin-bottom:0px; margin-top:0px;}
	tt {margin-left:0.5em; margin-right:0.5em; font-weight:lighter;}
	
	p {margin-top:0ex;}
	p.synopsis {margin-left:32px;}
	p.programlistingindent {margin-left:32px;}
	p.citetitle {margin-left:2em;}
	
	ul ul {list-style-type:square;}
	ul li p {margin-top:0ex; margin-bottom:.5ex; padding:0}
	ol li p {margin-top:0ex; margin-bottom:.5ex; padding:0}
	
	h1.reftitle {color:#a90000;}
	h1.reftitle {font-size:3.7ex; margin-top:0; margin-bottom:0; font-weight:bold}
	h1.title {color:black; font-size:4ex; margin-top:1ex; font-weight:bold}
	h2.title {color:#bd0000; margin-top:1ex; margin-bottom:.9ex; font-weight:bold; font-size:3ex}
	h3.title {color:#bd0000; margin-top:1ex; margin-bottom:.9ex; font-weight:bold; font-size:2.5ex}
	h4.title {color:#bd0000; margin-top:1ex; margin-bottom:.9ex; font-weight:bold; font-size:2ex}
	h2 {color:#bd0000; margin-top:1ex; margin-bottom:.9ex; font-weight:bold; font-size:2.5ex}
	h3 {color:#bd0000; margin-top:1ex; margin-bottom:.9ex; font-weight:bold; font-size:2ex} 
	
	pre.programlisting {margin-left:32px;}
	pre.synopsis {margin-left:32px;}
	
	
	.categorytitle {margin-top:8px; padding-top:0px;}
	.categorylist {background-color: #e1e6f2;}
 	</style>
</head>
<body>
<a name="top_of_page"></a><p style="font-size:1px;"></p>
<h1 class="reftitle">mpt_call_sedumi</h1>
<h2>Purpose</h2>
<p>A gateway function to SEDUMI solver (without errorchecks)</p>
<h2>Syntax</h2>
<pre class="synopsis">R = mpt_call_sedumi(S)</pre>
<h2>Description</h2>
<p></p>
		The function implements calls to solve LP directly and QP via transformation to second order cone.
        
        For LP in a form
        <p class="programlistingindent"><img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi45.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi45.png"></p>
        we need to get a following form accepted by SEDUMI        
        <p class="programlistingindent"><img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi46.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi46.png"></p>
        This can be achieved by introducing variables <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi1.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi1.png">, <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi2.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi2.png">, and <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi3.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi3.png"> 
        
      <p class="programlistingindent"><img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi47.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi47.png"></p>
        and putting them in one vector <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi4.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi4.png">. The LP to be solved by SEDUMI is formed
        by 
        <p class="programlistingindent"><img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi48.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi48.png"></p>
        and solved in <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi5.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi5.png"> variables.
        For QP of the form
        <p class="programlistingindent"><img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi49.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi49.png"></p>
        we need to impose constraints a in quadratic cone <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi6.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi6.png"> and to express the above problem as
        <p class="programlistingindent"><img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi50.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi50.png"></p>
        Since QP is convex, we can express <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi7.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi7.png"> in an epigraph form
        <p class="programlistingindent"><img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi51.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi51.png"></p>
        over quadratic constraints <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi8.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi8.png">. From the literature for convex programming 
        follows that the quadratic constraints <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi9.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi9.png"> can be written as conic constraints
        <p class="programlistingindent"><img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi52.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi52.png"></p>
        where the matrix <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi10.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi10.png"> is a Cholesky factor of <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi11.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi11.png">.
        This equivalence allows us to rewrite the epigraph form of QP <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi12.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi12.png">
        to a primal form <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi13.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi13.png"> accepted by SEDUMI. Equality and inequality 
        constraints are treated the same way as in LP case, i.e. by introducing the new variables <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi14.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi14.png">, 
        <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi15.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi15.png">, <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi16.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi16.png">, and <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi17.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi17.png">, <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi18.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi18.png">. Moreover, to express conic constraints
        we need two more variables <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi19.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi19.png">, <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi20.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi20.png">
        
      <p class="programlistingindent"><img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi53.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi53.png"></p>
        Collecting all variables to one column vector <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi21.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi21.png"> the linear equality constraints
        <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi22.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi22.png"> can be expressed in <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi23.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi23.png"> variable as <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi24.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi24.png"> where
        <p class="programlistingindent"><img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi54.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi54.png"></p>
        The objective function in <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi25.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi25.png"> is composed as <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi26.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi26.png">. 
        The individual constraints <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi27.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi27.png"> in <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi28.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi28.png"> are given in <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi29.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi29.png"> vector
        as follows: <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi30.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi30.png"> is free variable, <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi31.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi31.png">, <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi32.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi32.png">, <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi33.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi33.png"> are restricted to be nonnegative and 
        <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi34.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi34.png">, <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi35.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi35.png"> form the conic constraint <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi36.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi36.png">.
        
                        
	<h2>Input Arguments</h2>
<table cellspacing="0" class="body" cellpadding="4" border="0" width="100%">
<colgroup>
<col width="31%">
<col width="69%">
</colgroup>
<tbody><tr valign="top">
<td><tt>S</tt></td>
<td>
<p></p>Structure of the <tt>Opt</tt> class<p>
	    		Class: <tt>struct</tt><p></p><tr valign="top">
<td><tt>S.H</tt></td>
<td>
<p></p>Quadratic part of the objective function.<p>
	    		Class: <tt>double</tt></p>
<p>
	    		Default: []</p>
</td>
</tr><tr valign="top">
<td><tt>S.f</tt></td>
<td>
<p></p>Linear part of the objective function.<p>
	    		Class: <tt>double</tt></p>
</td>
</tr><tr valign="top">
<td><tt>S.A</tt></td>
<td>
<p></p>Linear part of the inequality constraints <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi37.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi37.png">.<p>
	    		Class: <tt>double</tt></p>
</td>
</tr><tr valign="top">
<td><tt>S.b</tt></td>
<td>
<p></p>Right hand side of the inequality constraints <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi38.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi38.png">.<p>
	    		Class: <tt>double</tt></p>
</td>
</tr><tr valign="top">
<td><tt>S.Ae</tt></td>
<td>
<p></p>Linear part of the equality constraints <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi39.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi39.png">.<p>
	    		Class: <tt>double</tt></p>
<p>
	    		Default: []</p>
</td>
</tr><tr valign="top">
<td><tt>S.be</tt></td>
<td>
<p></p>Right hand side of the equality constraints <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi40.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi40.png">.<p>
	    		Class: <tt>double</tt></p>
<p>
	    		Default: []</p>
</td>
</tr><tr valign="top">
<td><tt>S.lb</tt></td>
<td>
<p></p>Lower bound for the variables <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi41.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi41.png">.<p>
	    		Class: <tt>double</tt></p>
<p>
	    		Default: []</p>
</td>
</tr><tr valign="top">
<td><tt>S.ub</tt></td>
<td>
<p></p>Upper bound for the variables <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi42.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi42.png">.<p>
	    		Class: <tt>double</tt></p>
<p>
	    		Default: []</p>
</td>
</tr><tr valign="top">
<td><tt>S.n</tt></td>
<td>
<p></p>Problem dimension (number of variables).<p>
	    		Class: <tt>double</tt></p>
</td>
</tr><tr valign="top">
<td><tt>S.m</tt></td>
<td>
<p></p>Number of inequalities in <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi43.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi43.png">.<p>
	    		Class: <tt>double</tt></p>
</td>
</tr><tr valign="top">
<td><tt>S.me</tt></td>
<td>
<p></p>Number of equalities in <img src="../../../../fig/mpt/modules/solvers/mpt_call_sedumi44.png" alt="../../../../fig/mpt/modules/solvers/mpt_call_sedumi44.png">.<p>
	    		Class: <tt>double</tt></p>
</td>
</tr><tr valign="top">
<td><tt>S.problem_type</tt></td>
<td>
<p></p>A string specifying the problem to be solved (only LP and QP are allowed).<p>
	    		Class: <tt>char</tt></p>
</td>
</tr><tr valign="top">
<td><tt>S.test</tt></td>
<td>
<p></p>Call (false) or not to call (true) MPT global settings.<p>
	    		Class: <tt>logical</tt></p>
<p>
	    		Default: false</p>
</td>
</tr><p></p></p>
</td>
</tr></tbody>
</table>
<h2>Output Arguments</h2>
<table cellspacing="0" class="body" cellpadding="4" border="0" width="100%">
<colgroup>
<col width="31%">
<col width="69%">
</colgroup>
<tbody><tr valign="top">
<td><tt>R</tt></td>
<td>
<p></p>result structure<p>
	    		Class: <tt>struct</tt><p></p><tr valign="top">
<td><tt>R.xopt</tt></td>
<td>
<p></p>optimal solution<p>
	    		Class: <tt>double</tt></p>
</td>
</tr><tr valign="top">
<td><tt>R.obj</tt></td>
<td>
<p></p>Optimal objective value.<p>
	    		Class: <tt>double</tt></p>
</td>
</tr><tr valign="top">
<td><tt>R.lambda</tt></td>
<td>
<p></p>Lagrangian multipliers<p>
	    		Class: <tt>double</tt></p>
</td>
</tr><tr valign="top">
<td><tt>R.exitflag</tt></td>
<td>
<p></p>An integer value that informs if the result was feasible (1), or otherwise (different from 1).<p>
	    		Class: <tt>double</tt></p>
</td>
</tr><tr valign="top">
<td><tt>R.how</tt></td>
<td>
<p></p>A string that informs if the result was feasible ('ok'), or if any problem appeared through optimization.<p>
	    		Class: <tt>char</tt></p>
</td>
</tr><p></p></p>
</td>
</tr></tbody>
</table>
<h2>References</h2>
<p class="citetitle">[1] 
	Stephen Boyd and Lieven Vandenberghe: Convex Optimization; Cambridge University Press
</p>
<h2>See Also</h2>
<a href="./mpt_solve.html">mpt_solve</a><p></p>
<table class="nav" summary="Navigation aid" border="0" width="100%" cellpadding="0" cellspacing="0"><tr valign="top">
<td align="left" width="20">
<a href="mpt_call_linprog.html" class="button">&#9664;</a>  </td>
<td align="left">mpt_call_linprog</td>
<td>  </td>
<td align="right">mpt_call_glpk</td>
<td align="right" width="20"><a href="mpt_call_glpk.html" class="button">&#9654;</a></td>
</tr></table>
<br><p>©  <b>2010-2013</b>     Martin Herceg: ETH Zurich,    <a href="mailto:herceg@control.ee.ethz.ch">herceg@control.ee.ethz.ch</a></p>
</body>
</html>
